package com.cyf.util;

import cn.jpush.api.push.model.Options;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.AndroidNotification;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;
import cn.jpush.api.push.model.notification.WinphoneNotification;

import java.util.HashMap;
import java.util.Map;

/**
 * 极光推送工具类
 * Created by cage on 2017/2/28.
 */
public class JPushUtil {

    /**
     * 根据 设备终端ID 推送消息
     *
     * @param alias         别名
     * @param content       内容
     * @param extras        扩展字段
     * @return PushPayload
     */
    public static PushPayload buildPushObject_all_all_Alias(String alias, String content, Map<String, String> extras) {
        if (extras == null) {
            extras = new HashMap<>();
        }
        return PushPayload.newBuilder().setPlatform(Platform.all())
                .setAudience(Audience.alias(alias))
                //.setNotification(Notification.alert(content))
                .setNotification(Notification.newBuilder()
                        .setAlert(content)
                        .addPlatformNotification(AndroidNotification.newBuilder().addExtras(extras).build())
                        .addPlatformNotification(IosNotification.newBuilder()
                                // 此项是指定此推送的badge自动加1
                                .incrBadge(1)
                                // 此字段的值default表示系统默认声音；传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒，
                                // 如果系统没有此音频则以系统默认声音提醒；此字段如果传空字符串，iOS9及以上的系统是无声音提醒，以下的系统是默认声音
//                                .setSound("sound.caf")
                                .setSound("default")
                                .addExtras(extras).build())
                        .addPlatformNotification(WinphoneNotification.newBuilder().addExtras(extras).build())
                        .build())
                /*
                 * 如果目标平台为 iOS 平台 需要在 options中通过 apns_production 字段来制定推送环境。
                 * True 表示推送生产环境，False 表示要推送开发环境； 如果不指定则为推送开发环境
                 */
                .setOptions(Options.newBuilder()
                        .setApnsProduction(true)
                        .build())
                .build();
    }

    /**
     * 所有平台，所有设备，内容为 content 的通知
     *
     * @param content
     * @return
     */
    public static PushPayload buildPushObject_all_all_alert(String content) {
        return PushPayload.alertAll(content);
    }

    /**
     * 所有平台，推送目标是别名为 "alias"，通知内容为 content
     *
     * @param alias
     * @param content
     * @return
     */
    public static PushPayload buildPushObject_all_alias_alert(String alias, String content) {
        return PushPayload.newBuilder().setPlatform(Platform.all()).setAudience(Audience.alias(alias))
                .setNotification(Notification.alert(content)).build();
    }
}
